package com.example.homewrok.controller;

import com.example.homewrok.entity.Students;
import com.example.homewrok.jpa.StudentRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Optional;

@RestController  // 指定该类为 REST 控制器
@RequestMapping("/api")  // 设置请求路径前缀
public class StudentController {

    @Autowired
    private StudentRepository studentRepository;  // 注入学生仓库接口

    // 查询所有学生
    @GetMapping  // 处理 GET 请求
    public List<Students> getAllStudents() {
        return studentRepository.findAll();  // 返回所有学生信息
    }

    // 根据 ID 查询学生
    @GetMapping("/{id}")  // 处理带 ID 的 GET 请求
    public ResponseEntity<Students> getStudentById(@PathVariable Integer id) {
        Optional<Students> student = studentRepository.findById(id);  // 查找指定 ID 的学生
        return student.map(ResponseEntity::ok)  // 如果找到，返回学生信息
                .orElseGet(() -> ResponseEntity.notFound().build());  // 如果未找到，返回 404
    }

    // 新增学生
    @PostMapping("/students/{studentname}/{sex}/{age}/{classname}")
    public Students createStudent(@PathVariable String studentname,
                                  @PathVariable String sex,
                                  @PathVariable Integer age,
                                  @PathVariable String classname) {
        Students students = new Students(studentname, sex, age, classname);
        return studentRepository.save(students);  // 保存新学生信息并返回
    }

    // 更新学生信息
    @PutMapping("/{id}/{studentname}/{sex}/{age}/{classname}")  // 处理带 ID 的 PUT 请求
    public ResponseEntity<Students> updateStudent(@PathVariable Integer id,
                                                  @PathVariable String studentname,
                                                  @PathVariable String sex,
                                                  @PathVariable Integer age,
                                                  @PathVariable String classname) {
        Optional<Students> optionalStudent = studentRepository.findById(id);  // 查找指定 ID 的学生

        if (!optionalStudent.isPresent()) {  // 检查学生是否存在
            return ResponseEntity.notFound().build();  // 如果未找到，返回 404
        }

        // 更新学生信息
        Students student = optionalStudent.get();
        student.setStudentname(studentname);  // 使用 PathVariable 更新
        student.setSex(sex);                  // 使用 PathVariable 更新
        student.setAge(age);                  // 使用 PathVariable 更新
        student.setClassname(classname);      // 使用 PathVariable 更新

        Students updatedStudent = studentRepository.save(student);  // 保存更新后的学生信息
        return ResponseEntity.ok(updatedStudent);  // 返回更新后的学生信息
    }

    // 删除学生
    @DeleteMapping("/{id}")  // 处理带 ID 的 DELETE 请求
    public ResponseEntity<Void> deleteStudent(@PathVariable Integer id) {
        if (!studentRepository.existsById(id)) {  // 检查学生是否存在
            return ResponseEntity.notFound().build();  // 如果未找到，返回 404
        }
        studentRepository.deleteById(id);  // 删除指定 ID 的学生
        return ResponseEntity.noContent().build();  // 返回 204 No Content
    }

    // 分页查询学生
    @GetMapping("/page")  // 处理分页查询的 GET 请求
    public Page<Students> getStudentsByPage(@RequestParam(defaultValue = "0") int page,
                                            @RequestParam(defaultValue = "10") int size) {
        Pageable pageable = PageRequest.of(page, size);  // 创建分页请求
        return studentRepository.findAll(pageable);  // 返回分页的学生信息
    }
}